#include <bits/stdc++.h>
using namespace std;
const int N = 10;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int n, m, k, t, u, v;

char g[N][N];
bool row[N][N], col[N][N], cell[3][3][N]; // row[i][j]:i行有j,col[i][j]:i列有j,cell[3][3][N]:九宫格里也有j

bool dfs(int x, int y)
{
	if (y == 9)
		x++, y = 0; // 如果y出界的话，转到下一行第一个
	if (x == 9)		// 表示找到了方案，把方案输出
	{
		for (int i = 0; i < 9; i++)
			cout << g[i] << endl;
		return true;
	}
	if (g[x][y] != '.')
		return dfs(x, y + 1);	// 如果不是空格，直接枚举下一位
	for (int i = 0; i < 9; i++) // 否则，是空格的话要枚举当前填什么
	{
		if (!row[x][i] && !col[y][i] && !cell[x / 3][y / 3][i])
		{
			g[x][y] = i + '1';
			row[x][i] = col[y][i] = cell[x / 3][y / 3][i] = true;
			if (dfs(x, y + 1))
				return true;
			row[x][i] = col[y][i] = cell[x / 3][y / 3][i] = false; // 恢复现场，为了保证每搜完一个分支后，分支之间不会相互影响
			g[x][y] = '.';
		}
	}
	return false;
}

int main()
{
	for (int i = 0; i < 9; i++)
	{
		cin >> g[i];
		for (int j = 0; j < 9; j++)
		{
			if (g[i][j] != '.')
			{
				int t = g[i][j] - '1'; // 把1-9设成0-8
				row[i][t] = col[j][t] = cell[i / 3][j / 3][t] = true;
			}
		}
	}
	dfs(0, 0); // 从左上角开始搜索
	return 0;
}
